#include "HiranipraShared.h"

#include "HCM/IComponent.h"
#include "HCM/ComponentFactory.h"
#include "Platform/ISystemInformation.h"
#include "Platform/IWindow.h"

#ifndef _SHARED_PLATFORM_IAPPLICATION_H_
#define _SHARED_PLATFORM_IAPPLICATION_H_

namespace Hiranipra {
	namespace Platform {

		class IApplication : implements IComponent
		{
		public:
			virtual ~IApplication(){}

			virtual ISystemInformation* QuerySystemInformation() const = 0;

			virtual IWindow* NewWindow( const WindowParameters& params ) = 0;

			virtual uint64 GetTimeFrequency() const = 0;
			virtual uint64 GetTimeElapsed() = 0;
			virtual bool Update() = 0;
		};

		// {C18E39C3-A9D5-4582-BF14-6C135E87B547}
		DECLARE_COMPONENT_TYPE( IApplication ) = { 0xc18e39c3, 0xa9d5, 0x4582, { 0xbf, 0x14, 0x6c, 0x13, 0x5e, 0x87, 0xb5, 0x47 } };
	}
}

#endif // _SHARED_PLATFORM_IAPPLICATION_H_
